package com.nvwa.coding.model;

public class Tuple3<T1, T2, T3> {

    public final T1 _1;
    public final T2 _2;
    public final T3 _3;

    public Tuple3(T1 t1, T2 t2, T3 t3) {
        this._1 = t1;
        this._2 = t2;
        this._3 = t3;
    }


    public T1 get1() {
        return _1;
    }

    public T2 get2() {
        return _2;
    }

    public T3 get3() {
        return _3;
    }

    public T1 left() {
        return _1;
    }

    public T2 middle() {
        return _2;
    }

    public T3 right() {
        return _3;
    }

    public T1 first() {
        return _1;
    }

    public T2 second() {
        return _2;
    }

    public T3 third() {
        return _3;
    }
    public T1 getLeft() {
        return _1;
    }

    public T2 getMiddle() {
        return _2;
    }

    public T3 getRight() {
        return _3;
    }

    public T1 getFirst() {
        return _1;
    }

    public T2 getSecond() {
        return _2;
    }

    public T3 getThird() {
        return _3;
    }

    public Opt<T1> opt1() {
        return Opt.of(_1);
    }

    public Opt<T2> opt2() {
        return Opt.of(_2);
    }

    public Opt<T3> opt3() {
        return Opt.of(_3);
    }

    public Opt<T1> optLeft() {
        return Opt.of(_1);
    }

    public Opt<T2> optMiddle() {
        return Opt.of(_2);
    }

    public Opt<T3> optRight() {
        return Opt.of(_3);
    }

    public Opt<T1> optFirst() {
        return Opt.of(_1);
    }

    public Opt<T2> optSecond() {
        return Opt.of(_2);
    }

    public Opt<T3> optThird() {
        return Opt.of(_3);
    }

}
